/**
 * 埋点记录用户行为日志javascript
 * 作者：hybo
 * 时间：20170405
 */

//测试请求是否Ok
console.log("hello!~ I'm trackLog js，your requestID is " + requestID);

//服务器IP地址
var _serverAddr = "http://192.168.0.101:8080";

// 检测是否有 依赖的 jQuery 核心javascript文件，没有则尝试引入。本代码依赖jQuery
var jsTags = document.getElementsByTagName("script");
var isHasJquery = false;
for(var ii = 0; ii < jsTags.length; ii++) {
	try {
		var tagTmp = jsTags[ii];
		var src = tagTmp.src;
		if(src) {
			var index = src.toUpperCase().indexOf('JQUERY');
			if(index > 0) {
				isHasJquery = true;
				break;
			}
		} else {
			continue;
		}

	} catch(e) {
		continue;
	}
}
if(isHasJquery) {
	console.log("本页面已经包含了jqury.js，执行埋点初始化...");
	$TMD.init();
} else {
	console.log("本页面没有包含jqury.js，尝试引入...");
	var jq = document.createElement('script');
	jq.type = 'text/javascript';
	jq.async = true;

	if(jq.readyState) { // IE
		jq.onreadystatechange = function() {
			if(jq.readyState == "loaded" ||
				jq.readyState == "complete") {
				jq.onreadystatechange = null;
				importJquery();
			}
		};
	} else { // Others: Firefox, Safari, Chrome, and Opera
		jq.onload = function() {
			importJquery();
		};
	}

	jq.src = _serverAddr + '/jquery.min.js';
	var s = document.getElementsByTagName('script')[0];
	s.parentNode.insertBefore(jq, s);

}

//异步引入jQuery之后执行的回调方法
function importJquery() {
	if($) {
		console.log("成功引入jQuery完毕，执行埋点初始化...");
		$TMD.init();
	} else {
		console.log("引入jQuery失败");
	}
}

;

window.tmd = window.tmd || {}; //定义全局的 tmd 对象

(function(tmd, undefined) {

	//TODO 定义发送日志请求的URL
	var _sendURL = _serverAddr + "/track/updateBean";

	//用户请求ID
	//	var _requestID = "";

	//发送请求到服务器时的参数对象
	var _sendInfoParam = {
		requestID: "",
		visitorID:"",
		duration: ""
	};

	//获取页面展示时的时间戳
	var openTimestamp = (new Date()).valueOf();

	/**
	 * 初始化
	 */
	tmd.init = function() {
		//解析_md配置
		if(_md) {
			for(var ii in _md) {
				switch(_md[ii][0]) {
					case '_sendURL':
						_sendURL = _md[ii][1];
						break;
					case '_requestID':
						_sendInfoParam.requestID = _md[ii][1];
						break;
					default:
						break;
				}
			}
		}

		console.log("_sendInfoParam:" + _sendInfoParam);
		
		//获取 visitorID
		tmd.getVisitorID();

		//绑定页面关闭前触发事件
		$(window).bind('beforeunload', function() {
			tmd.logDuration();
			tmd.sendInfo();
		});

	};
	
	/**
	 * 获取 visitorID
	 */
	tmd.getVisitorID = function(){
		var visitorIDKey  = "visitorID";
		
		//尝试从 cookie 中获取，如果获取失败，则尝试从localStorage取值
		var visitorIDTmp = tmd.getCookie(visitorIDKey);
		if(visitorIDTmp == null || visitorIDTmp == ""){
			visitorIDTmp = tmd.getLocalStorage(visitorIDKey);
		}
		
		//如果没有获取到值，则将 requestID作为visitorID，并存入 cookie，localStorage
		if(visitorIDTmp == null || visitorIDTmp == ""){
			visitorIDTmp = _sendInfoParam.requestID;
			tmd.setCookie(visitorIDKey,visitorIDTmp,365*20);
			tmd.setLocalStorage(visitorIDKey,visitorIDTmp);
		}
		_sendInfoParam.visitorID=visitorIDTmp;
	};

	/**
	 * 记录用户停留时间，并将时间 存入 _sendInfoParam 对象
	 */
	tmd.logDuration = function() {
		var closeTimestamp = (new Date()).valueOf();
		duration = closeTimestamp - openTimestamp;
		_sendInfoParam.duration = duration;
	};

	/**
	 * 异步发送信息到指定_sendURL
	 */
	tmd.sendInfo = function() {

		$.ajax({
			url: _sendURL,
			type: "POST",
			data: _sendInfoParam,
			async: false, //这块至关重要，用$post默认是true
			dataType: "jsonp",
			jsonp: "callbackparam", //服务端用于接收callback调用的function名的参数   
			jsonpCallback: "success_jsonpCallback", //callback的function名称,服务端会把名称和data一起传递回来   
			success: function(data) {
				console.log(data);
			},
			error: function(e) {
				console.log(e);
			}
		});
	};
	
	/**
	 * 存储键值对信息到浏览器本地存储
	 * @param {Object} key
	 * @param {Object} value
	 */
	tmd.setLocalStorage = function(key,value){
		if(key == null || key=="" || value==null || value==""){
			return;
		}
		localStorage.setItem(key,value);
	};
	
	/**
	 * 从浏览器本地存储取值
	 * @param {Object} key
	 */
	tmd.getLocalStorage = function(key){
		return localStorage.getItem(key);
	};

	/**
	 * 设置值到cookie
	 * @param {Object} c_name	变量名称
	 * @param {Object} value	变量值
	 * @param {Object} expiredays	过期天数
	 */
	tmd.setCookie = function(c_name, value, expiredays) {
		var exdate = new Date();
		exdate.setDate(exdate.getDate() + expiredays);
		document.cookie = c_name + "=" + escape(value) +
			((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
	};

	/**
	 * 从cookie中获取值
	 * @param {Object} c_name	变量名称
	 */
	tmd.getCookie = function(c_name) {
		if(document.cookie.length > 0) {
			c_start = document.cookie.indexOf(c_name + "=");
			if(c_start != -1) {
				c_start = c_start + c_name.length + 1;
				c_end = document.cookie.indexOf(";", c_start);
				if(c_end == -1) c_end = document.cookie.length;
				return unescape(document.cookie.substring(c_start, c_end));
			}
		}
		return "";
	};

	/**
	 * 检查cookie中是否存在指定变量的值
	 * @param {Object} c_name
	 */
	tmd.checkIsCookieExist = function (c_name) {
		c_value = getCookie(c_name);
		if(c_value != null && c_value != "") {
			return true;
		} else {
			return false;
		}
	};

	/**
	 * 测试是否ok可用
	 */
	tmd.sayHello = function() {
		console.log($); //测试是否能够正常使用jQuery
		console.log("hello!~ TMD is ok");
	};

	window.tmd = window.$TMD = tmd;
	return tmd;
})(window.tmd || {});